import os

# 检查项目文件是否完整
def check_project_files():
    """检查项目文件是否完整"""
    # 更新后的必要文件列表
    required_files = [
        "README.md",
        "demo.py",
        "batch_image.py",
        "batch_video.py",
        "check_project.py",
        "install/install.bat",
        "install/requirements.txt",
        "core/config_manager.py",
        "core/device_manager.py",
        "core/model_manager.py",
        "core/deploy.py",
        "inference/image_inference.py",
        "inference/video_inference.py",
        "utils/path_utils.py",
        "utils/batch_processor.py"
    ]
    
    # 更新后的必要目录列表
    required_dirs = ["models", "outputs", "test_images", "core", "inference", "utils", "install"]
    
    # 确保必要目录存在
    for dir_path in required_dirs:
        if not os.path.exists(dir_path):
            try:
                os.makedirs(dir_path)
                print(f"已创建目录: {dir_path}")
            except Exception as e:
                print(f"创建目录{dir_path}失败: {e}")
    
    # 检查必要文件
    missing_files = []
    for file in required_files:
        if not os.path.exists(file):
            missing_files.append(file)
    
    if missing_files:
        print(f"错误: 缺少以下必要文件: {missing_files}")
        return False
    else:
        print("项目文件检查通过，所有必要文件已创建")
        return True

# 显示项目信息
def show_project_info():
    """显示项目信息"""
    print("\n===== MiniCPM-V 本地部署与推理项目信息 ======")
    print("1. 项目模块化结构:")
    print("   - 核心模块 (core/): 包含配置管理、设备管理和模型管理等核心功能")
    print("   - 推理模块 (inference/): 包含图像和视频推理的具体实现")
    print("   - 工具模块 (utils/): 提供路径处理和批量处理等通用工具")
    print("   - 安装模块 (install/): 包含安装脚本和依赖清单")
    
    print("\n2. 主要文件:")
    print("   - README.md: 项目说明文档")
    print("   - demo.py: 主程序，基于模块化架构的推理入口")
    print("   - batch_image.py: 批量图片推理脚本")
    print("   - batch_video.py: 批量视频推理脚本")
    print("   - check_project.py: 项目完整性检查脚本")
    print("   - install/install.bat: Windows安装脚本")
    print("   - install/requirements.txt: 项目依赖清单")
    
    print("\n3. 如何使用:")
    print("   推荐执行流程:")
    print("   1) 安装环境: 运行install/install.bat自动安装所有依赖")
    print("   2) 检查项目完整性: python check_project.py")
    print("   3) 运行主程序: python demo.py")
    print("   4) 批量图片推理: python batch_image.py --video_dir <图片目录>")
    print("   5) 批量视频推理: python batch_video.py --video_dir <视频目录>")
    
    print("\n4. 功能特点:")
    print("   - 模块化架构: 清晰的代码组织，便于维护和扩展")
    print("   - 配置管理: 灵活的配置系统，自动检测系统环境")
    print("   - 设备优化: 智能的设备管理，支持GPU加速和自动混合精度")
    print("   - 多种推理: 支持图像和视频两种输入方式的推理功能")
    print("   - 批量处理: 高效的并行批量处理，支持结果导出到CSV")
    print("   - 自动资源管理: 智能的模型加载和卸载，优化内存使用")
    
    print("\n5. 注意事项:")
    print("   - 首次运行install.bat时，依赖安装可能需要较长时间")
    print("   - 模型首次加载时会从本地加载，确保models目录包含模型文件")
    print("   - 推理过程中会占用较多GPU内存，请确保您的设备满足要求")
    print("   - 所有推理结果都会保存在outputs目录")

if __name__ == "__main__":
    print("正在检查MiniCPM-V项目完整性...")
    if check_project_files():
        show_project_info()
        print("\n项目已准备就绪，您可以开始使用了！")
    else:
        print("请检查项目文件完整性")